﻿#include "web_client_bridge.h"
#include <qmessagebox.h>

WebClientBridge::WebClientBridge(QObject *parent) :
    QObject(parent),
    myDevelopTool(nullptr),
    str_port("0518"),
    someattribute_1("someattribute_test"),
    someattribute_2(QString::fromLocal8Bit("someattribute_2_的值呀"))
{
    /*
     * 首先需要设置一个环境变量QTWEBENGINE_REMOTE_DEBUGGING来指定调试页面(谷歌浏览器F12打开的界面)所使用的端口号。例如，将7777端口设为调试端口，可在主窗口初始化方法的最开头添加下面的代码：
     * 这个时候控制台会打印这一句话 Remote debugging server started successfully. Try pointing a Chromium-based browser to http://127.0.0.1:7777
     * 这个时候你直接在浏览器上输入 http://127.0.0.1:7777 或者 http://localhost:7777 就可以进入开发者工具页面
     * 当然你要是觉得这样子不舒服,那你可以再创建一个窗口显示一个web页面,但是QWebEngineView::load()中要填上 http://127.0.0.1:7777 或者 http://localhost:7777这个地址
     * 这里我也进行展示下自己创建一个指定调试页面,若是要在前端通过按键打开,则需要在辅助类(WebClientBridge)提供一个给前端调用的函数,函数中就是创建一个调试界面的窗口,前端在检测到按键之后就调用即可
    */
    qputenv("QTWEBENGINE_REMOTE_DEBUGGING",str_port.toStdString().c_str() );
}

//供给前端调用的打开谷歌开发者界面的接口,这个所有项目中都不用改动,只要在前端特定的情况下(例如按下某个按钮)调用就可以
void WebClientBridge::openDevelopTool()
{
    qDebug()<<"openDevelopTool";
    //防止创建多个DebelopTool界面
    if(!myDevelopTool) myDevelopTool = new DevelopTool("http://127.0.0.1:"+str_port);
    myDevelopTool->show();
}

void WebClientBridge::jscall(const QString &datafromjs)
{
    QMessageBox::information(NULL, QString::fromLocal8Bit("client直接变量调用"), QString::fromLocal8Bit("c端的直接变量调用:%1").arg(someattribute_1));
    qDebug()<<"someattribute_2:"+someattribute_2;
    /*
     * 这里使用进行了属性绑定的函数改变变量的值,在前端也能同步这个值
     * 若直接写 this->someattribute_1 = "111111111111111",则前端中的对应值并未改变
     * 测试流程,先点击前端中的 调用c++的按钮,此时你会发现someattribute_1的值被前端更改并打印,
     * 随后查看控制台你会发现qDebug打印出来的 111111111111111,之后点击client界面上的pushButton,
     * 若代码是setSomeattribute_1( "111111111111111"); 则前端弹出会有someattribute_1:111111111111111
     * 若代码是this->someattribute_1 = "111111111111111";则前端弹出会有someattribute_1:xxxxxxxxx(xxxxxxxxx代表不是111111111111111的意思)
     * */
    setSomeattribute_1( "111111111111111");
    qDebug()<<someattribute_1;
    QMessageBox::information(NULL, QString::fromLocal8Bit("jscallme公开变量掉用"), QString::fromLocal8Bit("前端的公开变量调用:%1").arg(datafromjs));
}
